<!doctype html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>函数</title>
	</head>
	<body>
	</body>
	<script type="text/javascript">
		
		// 函数      
		// 某个特殊功能的代码块
		// 一个函数就是一个功能

		// 老王吃鸡。
		console.log("老王开始吃" + chiji(30));
	
		console.log("张军开始吃" + chiji(18));

		console.log("刘松开始吃" + chiji(5));		
		function chiji(money){
			console.log("班长坐46区间到地铁站");
			console.log("班长到店里打包一份🐔");
			console.log("班长坐46回来");
			if (money > 25) {
				return "班长带回来的大分黄焖鸡";
			} else if (money > 22)  {
				return "班长带回来的小份黄焖鸡";
			} else if (money > 15){
				return "班长带回来的小份黄焖鸡骨头";
			} else {
				return "班长带回来的XXXX";
			}
		}


		// 作用域 函数外部定义的变量可以在函数内部使用，函数内部定义的变量不能在函数外部使用。
		// 在函数内部写 a = 10  省略var的时候， a也是全局变量。
		// 函数里面最好不要写 var a = b = c = 10;此时a是局部变量， b，c是全局变量
		// 

		// 变量名提前。
		var a = 20;
		function t1(){
			console.log(a); //undefined
			var a = 10;
			console.log(a); //10
		}
		t1();

		// 函数命名表达式
		// var fn = function test(){
		// 	console.log("执行了test");
		// }
		// fn();

		var num1 = 16;
		var obj1 = {name:"lisi"};

		var t = "name";

		console.log(obj1.t);
		console.log(obj1[t]);
		// 闭包
		// 函数里面定义的函数。

		// 闭包里面用到的局部变量会被保存在闭包内部

		// 第一种情况，执行两个fn生成了2个a和2个t1；那么f1和f2里面的a就不是同一个a
		function fn(){
			var a = 10;
			function t1(){
				console.log(++a);
			}
			return t1;
		}
		var f1 = fn();
		var f2 = fn();
		f1();
		f1();
		f1();
		f1();
		f2();


		// 第二种情况，执行一次fn生成两个函数t1和t2，t1和t2是在同一次fn执行的时候生成的，所以保存的a的值也是同一个a，

		function fn(){
			var a = 10;
			function t1(){
				console.log(++a);
			}
			function t2(){
				console.log(++a);
			}
			return [t1, t2];
		}
		var fArr  = fn();
		var f1 = fArr[0];
		var f2 = fArr[1];
		f1();
		f1();
		f1();
		f1();
		f2();











	</script>
</html>